#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import sys
import subprocess

"""
知识星球爬虫启动脚本
"""


def print_color(text, color_code=32):
    """打印带颜色的文本"""
    print(f"\033[{color_code}m{text}\033[0m")


def check_python_version():
    """检查Python版本"""
    required_version = (3, 7)
    current_version = sys.version_info
    
    if current_version < required_version:
        print_color(f"错误：需要Python {required_version[0]}.{required_version[1]} 或更高版本，当前版本是 {current_version[0]}.{current_version[1]}", 31)
        return False
    return True


def check_and_install_dependencies():
    """检查并安装依赖"""
    try:
        # 检查pip是否安装
        subprocess.check_call([sys.executable, '-m', 'pip', '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        
        # 安装依赖
        print_color("正在安装依赖包...")
        subprocess.check_call([sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt'])
        return True
    except subprocess.CalledProcessError:
        print_color("错误：安装依赖包失败，请手动安装requirements.txt中的包", 31)
        return False


def check_env_file():
    """检查.env文件是否存在"""
    if not os.path.exists('.env'):
        if os.path.exists('.env.example'):
            print_color("警告：.env文件不存在，但找到.env.example", 33)
            print_color("请复制.env.example并重命名为.env，然后填入必要的配置信息")
        else:
            print_color("错误：未找到.env文件和.env.example文件", 31)
        return False
    return True


def run_spider(args=None):
    """运行爬虫"""
    cmd = [sys.executable, 'zsxq_spider.py']
    if args:
        cmd.extend(args)
    
    try:
        print_color("正在启动知识星球爬虫...")
        subprocess.check_call(cmd)
        print_color("爬虫执行完成！")
        return True
    except subprocess.CalledProcessError:
        print_color("错误：爬虫执行失败", 31)
        return False


def main():
    """主函数"""
    # 检查Python版本
    if not check_python_version():
        return 1
    
    # 检查并安装依赖
    if not check_and_install_dependencies():
        return 1
    
    # 检查.env文件
    if not check_env_file():
        return 1
    
    # 获取命令行参数
    args = sys.argv[1:]
    
    # 运行爬虫
    if run_spider(args):
        return 0
    else:
        return 1


if __name__ == '__main__':
    sys.exit(main())